需求

使用Bmob iOS SDK中的数据实时功能(http://docs.bmob.cn/ios/developdoc/index.html?menukey=develop_doc&...)完成以下功能:

  1. 用户可以随意发布帖子;
  2. 这个用户的关注者可以立即接收到这个发布的帖子信息。

其中第一个需求是很容易实现的,关键是第二个需求,需要用到数据实时功能去监听当前登录用户关注的作者是否发送新帖子。

解决方案

  • 方案1

接到这个需求,很容易就想到以下方案,我称之为表监听方案,原理如下:

表监听方案
设计的表如下:
记录用户信息的表
user(username,password,attention_authors) 其中attention_authors为用户的关注者列表

记录帖子信息的表
post(title,content,author)

监听过程:

  1. 用户登录
  2. 监听post表,每次有更新时,则遍历当前登录用户的关注人列表,判断最新添加的帖子的作者是否在该列表中,如果存在则推送该帖子给当前登录用户,否则,不作处理。

我们可以看出,该方案中,只要一但出现有新帖子产生,那么该应用的所有用户都会接收到新帖子的信息,只是根据当前用户是否有关注该帖子的作者来决定是否显示,那么假如应用的用户量一大,每天的新帖子数很多时,那么每一个用户每天接受这些帖子就需要消耗大量的流量,而显然,这些流量中的信息绝大一部分是对用户无用的。因此,我们需要改变一下监听策略。

  • 方案2

行监听方案,原理如下:

设计两张表:
user(username,password,attention_authors,last_post)
attention_authors 用户关注的作者的objectId列表,该字段为Array类型
last_post用户发的最后一篇帖子的objectId

post(title,content,author)

整个逻辑分为两个方面 :

1.发post

  • 更新post表,添加一条数据,并读取其objectId
  • 更新user表对应author==userName的记录,将1)中last_post置为objectId

2.收post

  • 网络读取attention_authors字段,监听User表中的objectId中对应的所有行
  • 当监听的行有更新时,读取lastID
  • 利用lastID查找post表对应的行,读取这些行信息并且主动发现给当前登录用户

对比方案1,该方案最大的优点在于,只有当前登录用户关注的作者发表新帖子时,用户才会收到更新推送,确保接收的信息对于用户而言都是有用的。

总结
在移动客户端的开发过程中,在设计完方案后,还需要考虑网络的交互,由于目前的移动网络流量还是比较昂贵的,因此,要尽可能地减少网络数据交互。由于现在有新的任务,目前只实现了使用行更新的方案,有兴趣的朋友可以尝试实现表监听方案来对比一下,如果后面时间充裕的话我也会将这两种方案进行更加深入的对比。

代码链接:[http://download.csdn.net/detail/linmaofuyuanzhang/8528065][2]

已注销
201 声望0 粉丝